#ifndef SWEEPWAVEFORM_H
#define SWEEPWAVEFORM_H

#include "WaveformBase.h"

// Przestrzeń nazw
namespace RafMat
{
namespace SimEngine
{

/**
    Klasa reprezentująca sygnał przemiatający pasmo częstotliwości.
*/
class SweepWaveform : public WaveformBase
{
public:

    /**

    */
    explicit SweepWaveform(SimInterface::ISimulator& sim,
                           double amplitude = 1, double freqSta = 0,
                           double freqEnd = 0.25);

    /**
        Zwraca aktualną wartość sygnału.
    */
    double getNextValue();


    void setFreqSta(double freq);
    void setFreqEnd(double freq);
    void setExpMode(double expMode);

    double getFreqSta() const { return m_freqStart; }
    double getFreqEnd() const { return m_freqEnd; }
    bool getExpMode() const { return m_expMode; }

    /**
        Zmienia ustawienia parametru za pomocą łańcuchów znakowych.
        Wspierane parametry:
        - \c period - Okres początkowy
        - \c period2 - Okres końcowy
        - \c expsw - 0 - przyrost liniowy, 1 - przyrost wykładniczy.

        \param [in] param Parametr, pod którym zapisujemy.
        \param [in] value Wartość, którą zapisujemy.
        \return True, w przypadku powodzenia.
    */
    virtual bool setParameter(const std::string& param, const std::string& value) throw(std::logic_error);

    /**
        Odczytuje parametr i zwraca jego wartość w formie łańcucha znaków.
        Wspierane parametry są takie same jak w setParameter.

        \param [in] param Parametr, który odczytujemy.
        \return Wartość odpowiadająca parametrowi.
    */
    virtual std::string getParameter(const std::string& param) const throw(std::logic_error);

    SimFile::ConfigWriter& dumpParameters(SimFile::ConfigWriter& o) const;
private:

    // Stałe dla interfesjsu IConfigurable.
    static const std::string CONF_FREQSTART;
    static const std::string CONF_FREQEND;
    static const std::string CONF_EXPSWEEP;

    double m_freqStart;
    double m_freqEnd;
    bool m_expMode;
};

}   // SimEngine namespace
}   // RafMat namespace

#endif // SWEEPWAVEFORM_H
